package com.hsp.udp;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

/**
 * @Author Stringzhua
 * @Date 2024/4/10 16:22
 * description:接收端A
 */
public class UDPReceiverA {
    public static void main(String[] args) throws IOException {
        //1.创建一个DatagramSocket对象,准备在9999端口接收数据
        DatagramSocket socket = new DatagramSocket(9999);
        //2.构建一个DatagramPacket对象，准备接收数据
        //在前面讲解UDP协议时，老师说过一个数据包最大是64k
        byte[] buf = new byte[64 * 1024];
        DatagramPacket packet = new DatagramPacket(buf, buf.length);
        //3.调用  接收方法,将通过网络传输的DatagramPacket对象
        //填充到packet对象
        //提示:当有数据包发送到本机的9999端口时,就会接收到数据
        //如果没有数据包发送到本机的9999端口时,就会阻塞等待
        System.out.println("接收端A 等待接收数据...");
        socket.receive(packet);

        //4.可以把packet 进行拆包,取出数据并显示
        int length = packet.getLength();//实际接收到的数据字节长度
        byte[] data = packet.getData();//接收到的数据

        String s = new String(data, 0, length);
        System.out.println(s);

        //====回复信息给B端
        //将需要发送的数据,封装到DatagramPacket对象
        data = "好的，明天见".getBytes();
//        new DatagramPacket(data,data.length,主机,接收端);
//        DatagramPacket packet = new DatagramPacket(data, data.length, InetAddress.getLocalHost(), 9999);
        //说明：封装的DatagramPacket对象 data内容字节数组,data.length,主机(IP),端口
        packet =
                new DatagramPacket(data, data.length, InetAddress.getByName("192.168.36.1"), 9998);
        socket.send(packet);//发送

        //5.关闭资源
        socket.close();
        System.out.println("A端退出");
    }
}
